import xml.etree.ElementTree as ET
import re
import sys
import os

def extract_entry_content(xml_file, txt_file):
    """
    从XML文件中提取Entry标签的include属性内容，并保存到txt文件
    
    Args:
        xml_file: 输入的XML文件路径
        txt_file: 输出的txt文件路径
    """
    try:
        # 解析XML文件
        tree = ET.parse(xml_file)
        root = tree.getroot()
        
        # 打开txt文件准备写入
        with open(txt_file, 'w', encoding='utf-8') as f:
            # 查找所有的Entry元素
            for entry in root.findall('.//Entry'):
                include_content = entry.get('include')
                if include_content:
                    f.write(include_content + '\n')
        
        print(f"成功从 {xml_file} 提取内容到 {txt_file}")
        
    except ET.ParseError:
        print("XML解析错误，尝试使用正则表达式方法...")
        # 如果XML格式有问题，使用正则表达式作为备选方案
        extract_with_regex(xml_file, txt_file)
    except Exception as e:
        print(f"处理文件时出错: {e}")

def extract_with_regex(xml_file, txt_file):
    """
    使用正则表达式方法提取内容（备选方案）
    """
    try:
        with open(xml_file, 'r', encoding='utf-8') as xml_f:
            content = xml_f.read()
        
        # 使用正则表达式匹配 <Entry include="..." /> 格式
        pattern = r'<Entry\s+include="([^"]+)"\s*/>'
        matches = re.findall(pattern, content)
        
        with open(txt_file, 'w', encoding='utf-8') as txt_f:
            for match in matches:
                txt_f.write(match + '\n')
        
        print(f"使用正则表达式成功从 {xml_file} 提取 {len(matches)} 个条目到 {txt_file}")
        
    except Exception as e:
        print(f"正则表达式方法也失败: {e}")

def main():
    """
    主函数：处理命令行参数
    """
    if len(sys.argv) != 2:
        print("使用方法: python ./transferXmlToTxt.py a.xml")
        print("示例: python ./transferXmlToTxt.py input.xml")
        sys.exit(1)
    
    xml_file = sys.argv[1]
    
    # 检查文件是否存在
    if not os.path.isfile(xml_file):
        print(f"错误: 文件 '{xml_file}' 不存在")
        sys.exit(1)
    
    # 生成输出文件名（将.xml替换为.txt）
    if xml_file.endswith('.xml'):
        txt_file = xml_file[:-4] + '.txt'
    else:
        txt_file = xml_file + '.txt'
    
    print(f"输入文件: {xml_file}")
    print(f"输出文件: {txt_file}")
    
    # 执行转换
    extract_entry_content(xml_file, txt_file)

if __name__ == "__main__":
    main()